package eleventh_day;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 *
 * 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。
 */
public class IsPalindrome {
    public static boolean isPalindrome(int x) {
        // 1 将x转为字符串解决
//        StringBuilder s = new StringBuilder();
//        s.append(x);
//        int left = 0;
//        int right = s.length() - 1;
//        while (left <= right) {
//            if (s.charAt(left) != s.charAt(right)) {
//                return false;
//            }
//            left ++;
//            right --;
//        }
//        return true;

        // 2 直接翻转运用字符串的方法比较
//        StringBuilder s = new StringBuilder();
//        s.append(x);
//        StringBuilder s1 = new StringBuilder();
//        s1.append(x);
//        if (s1.toString().equals(s.reverse().toString())) { // 为什么内容相同却不进循环？？？？？？ 注意在不是String中其他都是默认比较地址
//            return true;
//        }
//        return false;

        // 3 不使用字符串
//        if (x < 0) {
//            // 负数不可能是回文
//            return false;
//        }
//        List<Integer> list = new ArrayList<>(); // 用来存储x的每位数
//        while (x != 0) {
//            list.add(x % 10);
//            x /= 10;
//        }
//        // 双指针遍历数组
//        int left = 0;
//        int right = list.size() - 1;
//        while (left <= right) {
//            if (list.get(left) != list.get(right)) {
//                return false;
//            }
//            left ++;
//            right --;
//        }
//        return true;

        // 不使用字符串，只翻转一半
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        // 当原始数字小于或等于反转后的数字，就说明已经处理到了数字的一半
        int reverseNum = 0;
        // 如果是奇数个数字，不用考虑中位上的数字
        while (reverseNum < x) {
            reverseNum = reverseNum * 10 + x % 10;
            x /= 10;
        }
        // 循环结束后，reverseNum要么等于x的位数，要么比x多出一位（奇数的情况）
        return x == reverseNum || x == reverseNum / 10;
    }

    public static void main(String[] args) {
        int num = 1231;
        System.out.println(isPalindrome(num));
    }
}
